查看原文
其他

【每周一坑】统计英文小说词频

2017-03-03 crossin Crossin的编程教室

Thank God It’s Friday!

又到周五啦!眼看就要忙完一周的学习和工作,又可以出去浪咯。

然而,只有我们依旧无趣地在此刻发干货文,提醒着你有没有写新的代码?有没有了解新的语法?硬生生给你五彩斑斓的周末生活蒙上一层阴影。每每想到这,我就觉得,这档子事儿还真是……

干得漂亮!

不多说,先来看这周的题目。上周解答在后半部分。


统计英文词频

编程教室在之前发过一篇 数据分析:当赵雷唱民谣时他唱些什么?,里面对赵雷的几十首歌词做了分词、去冗余、统计的操作,得出了他在歌词中最喜欢用的词汇。

本周我们的题目与这个类似,不过要简单许多。

要求:
  • 统计一部英文小说里单词的出现次数(忽略大小写)

  • 按出现次数显示最高的 100 个单词

  • 【附加题】多统计几个不同作家的作品,挑选一些特征词汇的次数画在图表上,展示不同作家的风格区别。

示例:
Jane Eyre
----------------
1.  the   7406
2.  I     7245
3.  and   6346
4.  to    5155
5.  of    4331
6.  a     4314
...

因为英语天生自带分词,所以要比中文好处理。另外透露下,今天一同发送的 编程课堂 里,有解答这题的关键技巧。

我们提供了几部小说作为测试数据,公众号里回复 小说 可获取下载地址。

依旧欢迎大家积极投稿~

Talk is cheap. Show me the code.



双色球选号器解答

这道题还是比较简单的。就是如何从一定的范围中随机地选出几个数。

我们的课程中有介绍过 random.randint 方法,可以产生一定范围中的一个随机整数。所以你可以调用多次该方法,获取到足够多的数。当然考虑到有可能出现重复,需要判断随机出来的值是否有效。

然而这并不是一个好办法。

random 模块中其实有现成的方法:sample。它的作用就是从序列中随机挑选一些元素。因此,选取红球只需要:

import random
# 1~33的列表
red_pool = range(1, 34) red = random.sample(red_pool, 6)

蓝球,可以一样用 sample,或者 random 的另一个方法:choice。它的作用是从序列中随机挑选一个元素:

# 1~16的列表
blue_pool = range(1, 17) blue = random.choice(blue_pool)

这就大功告成了!

如果想显示的好看些(py2):

print '红球:', red.sort()
for r in red.sort():
   print '%02d' % r,
print
print '蓝球: %02d' % blue

上一期的答案里,@王任 同学用一行代码搞定了选号:

import random [random.randint(1, 16), sorted(random.sample(range(1, 34), 6))]

另一位同学 @张良 完成了专注买彩一百年的代码,参见:

然而,当我今天第一次运行他的代码时,结果是:

100 years late, you spend 73000, and earn 3031520

我想这是写错了吧。后来又 run 了许多次,发现并不是……

确实是我错过了 300 万。



近期文章推荐阅读:

如何用100行Python代码做出魔性声控游戏“八分音符酱”

数据分析:当赵雷唱民谣时他唱些什么?

一行代码扫出“敬业福”

我扒了杜蕾斯的微博

Python 爬虫爬取美剧网站

个人开发者如何申请微信小程序

今天,你抢到票了吗?

爆款游戏《贪吃蛇大作战》的 Python 实现




欢迎加入

Crossin的编程教室

crossincode.com

新手入门QQ群:319476204

微信请加 crossin11 留言入群(初级/进阶)


  请把我们分享给身边爱学习的小伙伴 :)  


点击左下角“阅读原文”,查看更多学习资源

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存